/*
 * Transcript_MarieCurie.h
 *
 *  Created on: Apr 19, 2012
 *      Author: desilva
 */

#ifndef Transcript_MarieCurie_H_
#define Transcript_MarieCurie_H_

#include "TranscriptParser.h"

/**
 * A specific student's data.  See {@link TranscriptParser.h} for the most
 * up-to-date descriptions of the methods.
 */
class Transcript_MarieCurie: public TranscriptParser
{
public:
    Transcript_MarieCurie()
    {
    }

    virtual ~Transcript_MarieCurie()
    {
    }

    /**
     * Gets the student's name.
     * @return  a vector of name strings for the student.  The last position is
     *      the last name (surname or family name) of the student while the
     *      first position is the first name of the student.
     */
    void getStudentName(std::vector<std::string>* name)
    {
        name->push_back("Marie");
        name->push_back("");
        name->push_back("Curie");
    }

    /**
     * Gets the student's ID number.
     * @return  the id number of the student as a string.
     */
    std::string getStudentId()
    {
        return "1934074";
    }

    /**
     * Gets the string representing which program the student belongs to.
     * <br />
     * <i>Example:</i> College of Sci &amp; Engineering
     * @return  the name of the program the student is in.
     */
    std::string getDegreeProgram()
    {
        return "College of Sci & Engineering";
    }

    /**
     * Gets the string representing which plan the student belongs to.
     * <br />
     * <i>Examples:</i>
     * <ul>
     *      <li>Computer Science Ph D Major</li>
     *      <li>Computer Science M S Major</li>
     * </ul>
     * @return  the name of the plan the student is in.
     */
    std::string getDegreePlan()
    {
        return "Computer Science M C S Major";
    }

    /**
     * Gets the name of the degree the student is seeking.
     * <br />
     * <i>Examples:</i>
     * <ul>
     *      <li>Master of Science</li>
     *      <li>Doctor of Philosophy</li>
     * </ul>
     * @return  the name of the degree the student is seeking.
     */
    std::string getDegreeName()
    {
        return "Master of Computer Science";
    }

    /**
     * Gets the name of the name of the student's advisor.
     * <br />
     * <i>Examples:</i>
     * <ul>
     *      <li>Meyer,Gary</li>
     *      <li>Interrante,Victoria L</li>
     *      <li>Heimdahl,Mats P E</li>
     * </ul>
     * @return  the name of the student's advisor.
     */
    std::string getDegreeAdvisor()
    {
        return "Interrante,Victoria L";
    }

    /**
     * Get a list of courses that the student has taken or is enrolled in.
     * @return  courseList  a list of courses that the student has taken
     */
    void getCourses(std::vector<Course>* courseList)
    {
        //Theory
        courseList->push_back(Course("Summer",
                                     "2012",
                                     "CSCI",
                                     "5421",
                                     3,
                                     0,
                                     "",
                                     0));
        //Applications
        courseList->push_back(Course("Fall",
                                     "2011",
                                     "CSCI",
                                     "5461",
                                     3,
                                     3,
                                     "A",
                                     12.0));
        //Systems
        courseList->push_back(Course("Fall",
                                     "2010",
                                     "CSCI",
                                     "5106",
                                     3,
                                     3,
                                     "B+",
                                     9.999));
        courseList->push_back(Course("Fall",
                                     "2010",
                                     "CSCI",
                                     "5304",
                                     3,
                                     3,
                                     "A",
                                     12.0));

        courseList->push_back(Course("Spring",
                                     "2011",
                                     "CSCI",
                                     "5802",
                                     3,
                                     3,
                                     "A",
                                     12.0));
        courseList->push_back(Course("Spring",
                                     "2011",
                                     "CSCI",
                                     "5512",
                                     3,
                                     3,
                                     "B",
                                     9.0));


        courseList->push_back(Course("Fall",
                                     "2011",
                                     "CSCI",
                                     "8970",
                                     1,
                                     1,
                                     "S",
                                     0));
        courseList->push_back(Course("Fall",
                                     "2011",
                                     "CSCI",
                                     "8161",
                                     3,
                                     3,
                                     "C",
                                     6.0));

        courseList->push_back(Course("Spring",
                                     "2012",
                                     "IE",
                                     "5541",
                                     3,
                                     3,
                                     "S",
                                     0,
                                     Course::SN));
        courseList->push_back(Course("Spring",
                                     "2012",
                                     "CSCI",
                                     "5801",
                                     3,
                                     3,
                                     "A",
                                     12.0));


    }

    //-------------------------------------------------------------------------
    //From PeopleSoft (UMReports)
    //------------------------------------------------------------------------
    /**
     * Gets the date the student was admitted to the degree program.
     * @return  the date the student was admitted in the form yyyymmdd
     */
    std::string getDegreeAdmissionDate()
    {
        return "20100708";
    }

    /**
     * Gets the term and year the student started the degree program.
     * @return  the term and year the student started the program as a pair.
     *      The first element is the term and the second is the semester.
     */
    std::pair<std::string, std::string> getDegreeStartSemester()
    {
        return std::pair<std::string, std::string>("Fall", "2010");
    }

    /**
     * Gets a list of all the committee members from the computer science
     * departmental database.
     * @return  a list of all of the committee members for the student.
     */
    std::vector<std::string> getCommitteMembers()
    {
        std::vector<std::string> committee;

        return committee;
    }

    //-------------------------------------------------------------------------
    //From Departmental Database
    //------------------------------------------------------------------------
    /**
     * Gets the current status of the degree program form.
     * @return  the status of the degree program form and the date the status
     *      was applied (the second item in the pair).  The date is in the form
     *      yyyymmdd.
     */
    std::pair<DegreeProgramFormStatus, std::string> getDegreeProgramFormStatus()
    {
        return std::pair<DegreeProgramFormStatus, std::string>(SUBMITTED_TO_DEPT,
                                                               "20120310");
    }

    /**
     * Gets the information about the plan the student is following.
     * @return  which plan the CS student is working to complete.
     */
    Plan getPlanInfo()
    {
        return NO_PLAN;
    }
};

#endif /* Transcript_MarieCurie_H_ */
